The development of computer software is a very critical activity; the problem is particular acute for large software applications, which are intended to run in a multi-tier and heterogeneous environment.
Several modeling tools have been proposed in the last years to aid developers (such as software designers and programmers) to master the inherent complexity of the developing process; for example, a very popular modeling tool is the “Rational Rose” by IBM Corporation. Generally, a modeling tool provides an Integrated Development Environment (IDE) for supporting the various phases relating to the building of each application (for example, its requirement definition, architectural design, code specification, and the like). For this purpose, the developers define a series of models; each model consists of an abstraction, which provides a simplified representation of the corresponding real artifact to be built. Preferably, the models are defined by using the Unified Modeling Language (UML). The UML is a standard modeling language, which provides a (graphical and textual) syntax and an underlying semantic for specifying all the aspects relating to the development of computer software (especially of the object-oriented type).
In this way, it is possible to visualize, assess and communicate the application before its actual realization (so as to reduce the risks of the corresponding development). Moreover, the models may be used to create and maintain the code of the application in a very simple, safe and time effective manner. Those aspects are particularly important for applications having distributed architecture, to be integrated with other systems, or intended to be used in critical environments.
Nevertheless, the task of developing computer software remains a complex and time-consuming activity. Particularly, the development process involves the contribution of a number of different actors (such as end-users, architects, designers, programmers, and the like). Moreover, each intervention may span a very long period and may be interrelated with several different activities.
Therefore, it is very difficult to track the actual progress of the development process.
Moreover, every developer that needs to use a model (created by another developer) does not have any idea of its completion status (unless s/he directly communicates with its author).
As a result, it is not possible to coordinate the activities of the different actors in an efficient manner.
All of the above hinders any orchestration of the human resources that are allocated to the development process (for example, when an activity creates a bottleneck for other activities depending on its completion). This may have a detrimental impact on the yield of the whole development process (thereby increasing its length and cost).